#ifndef GD32F4_USART_H
#define GD32F4_USART_H

#include "gd32f4_gpio.h"
#include "gd32f4xx_dma.h"
#include "gd32f4xx_usart.h"
#include "stdio.h"
#include "string.h"
//------------------------------------------配置开关-------------------------------
#define USART_DMA_TX_SW     1   // 是否使用DMA发送
#define USART_DMA_RX_SW     1   // 是否使用DMA接收
#define USART_PRINTF_SW	    1   // printf 重定义到串口功能开关
#define USART_RX_CB_SW	    1   // 串口接收回调函数开关



#if USART_RX_CB_SW
void USART_RX_Recall(uint8_t* data, uint32_t len);//如果打开开关需要自己实现这个函数
#endif


// PA9 	USART0_TX	AF7
#define USART_TX_RCU    RCU_GPIOA
#define USART_TX_PORT   GPIOA
#define USART_TX_PIN    GPIO_PIN_9
#define USART_TX_AF     GPIO_AF_7

// PA10 	USART0_RX	AF7
#define USART_RX_RCU    RCU_GPIOA
#define USART_RX_PORT   GPIOA
#define USART_RX_PIN    GPIO_PIN_10
#define USART_RX_AF     GPIO_AF_7

#define USART_RCU       RCU_USART0      // 串口时钟
#define USART_PORT      USART0          // 串口端口
#define USART_IRQN      USART0_IRQn     // 中断号
#define USART_BAUDRATE  115200UL        // 波特率
#define USART_PRE_PRIORITY 2              // 抢占优先级
#define USART_SUB_PRIORITY 2              // 响应优先级

#define DMA_TX_RCU RCU_DMA1
#define DMA_TX_PERIPH DMA1
#define DMA_TX_CH DMA_CH7
#define DMA_TX_SUB_PERIPH DMA_SUBPERI4

#define DMA_RX_RCU RCU_DMA1
#define DMA_RX_PERIPH DMA1
#define DMA_RX_CH DMA_CH5
#define DMA_RX_SUB_PERIPH DMA_SUBPERI4

#define RX_LENGTH 1024                   // 数据长度

void USART_Init();
void USART_SendByte(uint8_t data);
void USART_SendString(const char *str);


#endif // GD32F4_USART_H
